<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>call apply bind</title>
</head>
<body>
    

    <script>
    
        let o = {
            x: 100
        };

        function fn (a,b) {
            console.log(this.x,a+b);
        }

        console.log(fn.call(o,2,3));

        let b = {
            y: 200
        };
    
        function gn (a,b) {
            console.log(this.y,a+b);
        } 

        console.log(gn.apply(b,[2,3]));


        let c = {
            z: 300
        };

        function hn () {
            console.log(this.z);
        }

        console.log(hn.bind(c)());

        // 相同点： 都是用来改变this指向的   不同点： call apply 改变函数的上下文后立即执行，而bind返回的是改变了上下文的这个函数
        // 另外 apply 和 call 之间的参数也有区别，apply的第二个参数是一个数组   而 call 传参是单个传入参数的 

        setTimeout(() => {
            console.log('settimeout',this);
        }, 3000);


       
    </script>
</body>
</html>